<?php
if(!defined('BASE_DIR'))die('Cannot access the file !');
/**
 * -+-----------------------------------------
 * |PHP Framework
 * |Copyright (c) 2010 jinke.[iblue.cc]
 * |E-mail: mejinke@gmail.com
 * |Date: 2010-03-08
 * |Update: 2011-05-25
 * -+-----------------------------------------
 *
 * 文件处理类
 * @author jinke
 */
class Files
{


	/**
	 * 读取一个文 件
	 * @access	public
	 * @param	string	 $file 文件路径
	 * @param	bool	$error 出错时是否终止程序 Ture
	 */
	public static function read($file,$error=true)
	{
		if(!@$fp = @fopen($file, 'rb'))
		{
			if ($error)
				message_error('Load File','无法读取该文件！',message_debug(debug_backtrace()));
			else
				return false;
		}
		else
		{
			@$data = fread($fp,filesize($file));
			fclose($fp);
			return str_replace('\"','"',$data);
		}
	}


	/**
	 * 写入内容到文件
	 * @access	public
	 * @param	string	$file 文件路径
	 * @param	string	$content 将 要写入的内容
	 * @param	string	$mod 写入模式
	 * @param	bool	$error 出错时是否终止程序 TRUE
	 */
	public static function write($file,$content,$mod = 'w',$error=true)
	{
	
		if(!@$fp = @fopen($file, $mod))
		{
			if($error)
				message_error('Load File','无法读取该文件！',message_debug(debug_backtrace()));
			else
				return false;
		}
		else
		{
			@flock($fp, 2);
			@fwrite($fp, $content);
			@fclose($fp);
			return true;
		}
	}


	/**
	 * 删除文件
	 * @access	public
	 * @param	string	$file 文件路径
	 */
	public static function del($file)
	{	
		if (empty($file)) return;
		if(is_file($file))
			unlink($file);

		if(is_dir($file))
		{
			$handle = opendir($file);
			while(false !== ($myFile = readdir($handle)))
			{
				if($myFile != '.' && $myFile != '..')
				{
				 unlink($file.'/'.$myFile);
				}
			}
			closedir($handle);
			rmdir($file);
		}
		unset($file);
		return true;
	}



	/**
	 * 递规的创建目录
	 * @access public
	 * @param string $path 目录
	 */
	public  static function  mkdirs($path, $mode = 0755)
	{
		is_dir(dirname($path)) || Files::mkdirs(dirname($path), $mode);
		return is_dir($path) || @mkdir($path, $mode);
	}

	
	/**
	 * 取得字节数所对应的相关单位值
	 * @access public
	 * @param string $lenght
	 * @return string
	 */
	public static function setupSize($lenght) 
	{
		$units = array (
				'B',
				'KB',
				'MB',
				'GB',
				'TB',
				'PB',
				'EB',
				'ZB',
				'YB'
				);
				foreach ($units as $unit) 
				{
					if ($lenght > 1024)
					$lenght = round($lenght / 1024, 1);
					else
					break;
				}
				if (intval($lenght) == 0) 
				{
					return ("0 Bytes");
				}
				return $lenght . ' ' . $unit;
	}

	
	/**
	 * 获取远程HTTP文件大小
	 * @access public
	 * @param string $url 网络地址
	 * @return string
	 */
	public static function getHttpFileSize($url)
	{
		$url = parse_url($url);
		if($fp = @fsockopen($url['host'],empty($url['port'])?80:$url['port'],$error))
		{
			fputs($fp,"GET ".(empty($url['path'])?'/':$url['path'])." HTTP/1.1\r\n");
			fputs($fp,"Host:$url[host]\r\n\r\n");
			while(!feof($fp))
			{
				$tmp = fgets($fp);
				if(trim($tmp) == '')
				{
					break;
				}
				else if(preg_match('/Content-Length:(.*)/si',$tmp,$arr))
				{
					return Files::setupSize(trim($arr[1]));
				}
			}
			return null;
		}
		else
		{
			return null;
		}
	}


	/**
	 * 获取远程FTP文件大小
	 * @access public
	 * @param string $host FTP地址
	 * @param string $file 文件名称
	 * @param string $user 账号 默认[anonymous]
	 * @param string $pass 密码 默认[anonymous]
	 */
	public static function getFtpFileSize($host,$file,$user='anonymous',$pass='anonymous')
	{
		$conn = ftp_connect($host);
		ftp_login( $conn,$user,$pass );
		$size = Files::setupSize(ftp_size( $conn, $file ));
		ftp_close($conn);

		return $size;
	}

	
	/**
	 * 获取一个文件夹大小
	 * @access public
	 * @param string $dir 文件夹目录
	 * @return string
	 */
	public static function folderSize($dir) 
	{
		if (!preg_match('#/$#', $dir)) 
		{
			$dir .= '/';
		}
		$totalsize = 0;
		foreach (Files::fileList($dir) as $name) 
		{
			$totalsize += (@ is_dir($dir . $name) ? Files::folderSize("$dir$name/") : (int) @ filesize($dir .
			$name));
		}
		return $totalsize;
	}
	
	
	/**
	 * 判断目录是否为空
	 * @access public
	 * @param unknown_type $dir
	 */
	public static function isEmptyDir( $dir ){
		$dh=opendir($dir);
		while(false!==($f=readdir($dh)))
		{
			if($f!="." && $f!=   ".." )
			{
				return false;
			}
		}
		return true;
	}

	


	/**
	 * 获取目录中所有文件
	 * @access public
	 * @param string $path 目录路径
	 */
	public static function fileAll($path) 
	{
		$list = array ();
		if (($hndl = @ opendir($path)) === false) 
		{
			return $list;
		}
		while (($file = readdir($hndl)) !== false) 
		{
			if ($file != '.' && $file != '..') 
			{
				$list[] = $file;
			}
		}
		closedir($hndl);
		return $list;
	}
	
	
	/**
	 * 获取某个目录中的文件及目录
	 * @access public
	 * @param string $path 路径
	 */
	public static function fileList($path) 
	{
		if (!preg_match('#/$#', $path)) 
		{
			$path .= '/';
		}
		
		$f = $d = array ();
		
		foreach (Files::fileAll($path) as $name) 
		{
			if (@ is_dir($path . $name)) 
			{
				$d[] = $name;
			} 
			elseif (@ is_file($path . $name)) 
			{
				$f[] = $name;
			}
		}
		natcasesort($d);
		natcasesort($f);
		return array_merge($d, $f);
	}
	
	
	//无扩展名的目标保存名称
	public static function getCleanFilename($filename)
	{
		$filename=basename($filename);
		$filename=substr($filename,0,strlen($filename)-strlen(strrchr($filename, '.')));
		return $filename;
	}
	
	
	/**
	 * 获取文件信息资料
	 * @access public
	 * @param string $filename 文件路径
	 */
	public static function getExt($filename) 
	{
		if (strstr($filename, "\\") || strstr($filename, "/")) 
		{
			$filename = basename($filename);
		}
		if (strstr($filename, ".")) 
		{
			return mb_substr(strrchr($filename, '.'), 1);
		} 
		else 
		{
			return false;
		}
	}
	
	
	/**
	 * 获取某个目录中的所有目录
	 * @access public
	 * @param string $dir 目录路径
	 */
	public static function getFolder($dir) 
	{
		$folder = array ();
		if ($handle = opendir($dir)) 
		{
			while (false !== ($file = readdir($handle))) 
			{
				if ($file != "." && $file != ".." && substr($file, 0, 1) != ".") 
				{
					if (is_dir($dir . $file)) 
					{
						$folder[] = $file;
					}
				}
			}
			closedir($handle);
		}
		return $folder;
	}
	
	
	/**
	 * 获取某个目录中的所有文件
	 * @access public
	 * @param string $dir 目录路径
	 */
	public static function getFile($dir) 
	{
		$files = array ();
		if ($handle = opendir($dir)) 
		{
			while (false !== ($file = readdir($handle))) 
			{
				if ($file != "." && $file != ".." && substr($file, 0, 1) != ".") 
				{
					if (is_file($dir . $file)) 
					{
						$files[] = $file;
					}
				}
			}
			closedir($handle);
		}
		return $files;
	}
	
	

	/**
	  * 检测某个文件是否过期   过期返回true
	  * @param string	$file	文件
	  * @param int	$now	给定时间
	  * @return bool
	  */
	 public  static function isDated($file,$now)
	 {
		if(is_file($file))
		{
			$time = fileatime($file);
			$time=$time+$now*60;
			if(time()>$time)
			{
				@unlink($file);
				return true;
			}
		}
		return false;
	 }

}
?>